package cn.dongqihong.framework.util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件操作类
 * 
 * @author
 * 
 * @author DongQihong
 * 
 */
public class FileUtil {
	/**
	 * 重写文件内容
	 * 
	 * @param file
	 *            要更新的文件
	 * @param data
	 *            要重新的内容
	 */
	public static void rewrite(File file, String data) {
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(file));
			bw.write(data);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 读取文件内容行
	 * 
	 * @param file
	 *            要读取的文件
	 * @return 文件的内容行列表
	 */
	public static List<String> readList(File file) {
		BufferedReader br = null;
		List<String> data = new ArrayList<String>();
		try {
			br = new BufferedReader(new FileReader(file));
			for (String str = null; (str = br.readLine()) != null;) {
				data.add(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return data;
	}

	/**
	 * 删除文件
	 * 
	 * @param filePath 文件路径
	 */
	public static boolean deleFile(String filePath) {
		File file = new File(filePath);
		// 判断是否为文件并且存在
		if (file.isFile() && file.exists()) {
			return file.delete();
		}
		return false;
	}

	/**
	 * 删除目录以及目录下的文件
	 * 
	 * @param sPath
	 *            被删除目录的文件路径,必须以文件分隔符结尾
	 * @return 目录删除成功返回true，否则返回false
	 */
	public boolean deleDirectory(String sPath) {
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleFile(files[i].getAbsolutePath());
				if (!flag)
					break;
			} else { // 删除子目录
				flag = deleDirectory(files[i].getAbsolutePath());
				if (!flag) {
					break;
				}
			}
		}
		if (!flag) {
			return false;
		}
		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 改变图片的大小到宽为size，然后高随着宽等比例变化
	 * 
	 * @param is
	 *            上传的图片的输入流
	 * @param os
	 *            改变了图片的大小后，把图片的流输出到目标OutputStream
	 * @param width
	 *            新图片的宽
	 * @param format
	 *            新图片的格式
	 * @throws IOException
	 *             输入输出流异常
	 */
	public static void resizeImage(InputStream is, OutputStream os, int width,
			String format) throws IOException {
		BufferedImage prevImage = ImageIO.read(is);
		double oldWidth = prevImage.getWidth();
		double height = prevImage.getHeight();
		double percent = width / oldWidth;
		int newWidth = (int) (oldWidth * percent);
		int newHeight = (int) (height * percent);
		BufferedImage image = new BufferedImage(newWidth, newHeight,
				BufferedImage.TYPE_INT_BGR);
		Graphics graphics = image.createGraphics();
		graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null);
		ImageIO.write(image, format, os);
		os.flush();
		is.close();
		os.close();
	}
}
